package com.shujia.exception_.four;

public class Stock {

    public boolean checkStock(String userId, String goodsId) {
        /*
        出现了异常, 异常最终肯定是要修复的
        只有定位到了异常问题, 才能修复问题
         */
        String userName = null;
        String goodsName = null;
        try {
            /*
            从数据库去下单商品的库存, 判断库存是否充足
            查询数据库的时候如果出现了异常, 会把sql相关的异常抛出去
             */
            // 查询商品名称goodsId
            userName = "张三";
            goodsName = "华为手机";
            // 空指针异常, 需要程序员来修复这些问题, 不能往外抛出
            String str = null;
            System.out.println(str.length());
        } catch (Exception e) {
            // 检查库存出问题
            e.printStackTrace();// 记录异常信息到log文件

            // 抛出一个自己创建的异常对象, 会结束当前方法
            /*
            Exception 包含了编译时异常和运行时异常
                1, 编译时异常要求必须要在方法的声明上抛出异常
                2, 抛出的是运行是异常, 方法的声明可以不用向上抛出
             */
            // throw new Exception("库存不足!");
            // throw new RuntimeException("库存不足!");
            throw new StockLessException("库存不足!", userName, goodsName);
        }


        return true;
    }
}
